// API 配置
const BASE_URL = "http://localhost:3304/api"

// 封装HTTP请求方法
const request = (options) => {
  return new Promise((resolve, reject) => {
    // 开发环境下打印请求信息
    console.log('请求URL:', `${BASE_URL}${options.url}`);
    console.log('请求方法:', options.method || 'GET');
    console.log('请求参数:', options.data || {});
    
    wx.request({
      url: `${BASE_URL}${options.url}`,
      method: options.method || 'GET',
      data: options.data || {},
      header: {
        'content-type': 'application/json',
        ...options.header
      },
      success: (res) => {
        // 开发环境下打印响应信息
        console.log('响应数据:', res);
        
        if (res.statusCode >= 200 && res.statusCode < 300) {
          if (res.data.code ===200 || res.data.code ===201) {
            resolve(res.data.data);
          } else {
            wx.showToast({
              title: res.data.message || '请求失败',
              icon: 'none'
            });
            reject(res.data);
          }
        } else {
          wx.showToast({
            title: '网络请求失败',
            icon: 'none'
          });
          reject(res);
        }
      },
      fail: (err) => {
        // 开发环境下打印错误信息
        console.error('请求失败:', err);
        
        // 特殊处理域名不合法的错误
        if (err.errMsg && err.errMsg.includes('url not in domain list')) {
          wx.showModal({
            title: '提示',
            content: '请在开发者工具中关闭"不校验合法域名"选项，或在project.private.config.json中设置"urlCheck": false',
            showCancel: false
          });
        } else {
          wx.showToast({
            title: '网络连接失败',
            icon: 'none'
          });
        }
        
        reject(err);
      }
    });
  });
};

// GET 请求
const get = (url, data = {}) => {
  return request({
    url,
    method: 'GET',
    data
  });
};

// POST 请求
const post = (url, data = {}) => {
  return request({
    url,
    method: 'POST',
    data
  });
};

// PATCH 请求
const patch = (url, data = {}) => {
  return request({
    url,
    method: 'PATCH',
    data
  });
};

// DELETE 请求
const del = (url, data = {}) => {
  return request({
    url,
    method: 'DELETE',
    data
  });
};

module.exports = {
  get,
  post,
  patch,
  delete: del
};